let http = require('http')
let fs = require('fs')
let cheerio = require('cheerio')
let request = require('request')
let i = 0
let url = 'http://www.ss.pku.edu.cn/index.php/newscenter/news/2391'

// 初始url

function fetchPage (x) {     // 封装了一层函数
  startRequest(x)
}

function startRequest (x) {
  // 采用http模块向服务器发起一次get请求
  http.get(x, function (res) {
    let html = ''        // 用来存储请求网页的整个html内容
    let titles = []
    res.setEncoding('utf-8') // 防止中文乱码
    // 监听data事件，每次取一块数据
    res.on('data', function (chunk) {
      html += chunk
    })
    // 监听end事件，如果整个网页内容的html都获取完毕，就执行回调函数
    res.on('end', function () {

      let $ = cheerio.load(html) // 采用cheerio模块解析html

      let time = $('.article-info a:first-child').next().text().trim()

      let newsAitem = {
        // 获取文章的标题
        title: $('div.article-title a').text().trim(),
        // 获取文章发布的时间
        Time: time,
        // 获取当前文章的url
        link: 'http:// www.ss.pku.edu.cn' + $('div.article-title a').attr('href'),
        // 获取供稿单位
        author: $('[title=供稿]').text().trim(),
        // i是用来判断获取了多少篇文章
        i: i = i + 1

      }

      console.log(newsAitem)     // 打印新闻信息
      let newsAtitle = $('div.article-title a').text().trim()

      savedContent($, newsAtitle)  // 存储每篇文章的内容及文章标题

      savedImg($, newsAtitle)    // 存储每篇文章的图片及图片标题

      // 下一篇文章的url
      let nextLink = 'http:// www.ss.pku.edu.cn' + $('li.next a').attr('href')
      str1 = nextLink.split('-')  // 去除掉url后面的中文
      str = encodeURI(str1[0])
      // 这是亮点之一，通过控制I,可以控制爬取多少篇文章.
      if (i <= 500) {
        fetchPage(str)
      }

    })

  }).on('error', function (err) {
    console.log(err)
  })

}

// 该函数的作用：在本地存储所爬取的新闻内容资源
function savedContent ($, newsAtitle) {
  $('.article-content p').each(function (index, item) {
    let x = $(this).text()

    let y = x.substring(0, 2).trim()

    if (y === '') {
      x = x + '\n'
// 将新闻文本内容一段一段添加到/data文件夹下，并用新闻的标题来命名文件
      fs.appendFile('./data/' + newsAtitle + '.txt', x, 'utf-8', function (err) {
        if (err) {
          console.log(err)
        }
      })
    }
  })
}

//  该函数的作用：在本地存储所爬取到的图片资源
function savedImg ($, newsAtitle) {
  $('.article-content img').each(function (index, item) {
    let imgAtitle = $(this).parent().next().text().trim()  // 获取图片的标题
    if (imgAtitle.length > 35 || imgAtitle === '') {
      imgAtitle = 'Null'
    }
    let imgAfilename = imgAtitle + '.jpg'

    let imgAsrc = 'http:// www.ss.pku.edu.cn' + $(this).attr('src') // 获取图片的url

//  采用request模块，向服务器发起一次请求，获取图片资源
    request.head(imgAsrc, function (err, res, body) {
      if (err) {
        console.log(err)
      }
    })
    request(imgAsrc).pipe(fs.createWriteStream('./image/' + newsAtitle + '---' + imgAfilename))     // 通过流的方式，把图片写到本地/image目录下，并用新闻的标题和图片的标题作为图片的名称。
  })
}

fetchPage(url)
console.log('asd')
http.createServer(function (request, response) {

  //  发送 HTTP 头部
  //  HTTP 状态值: 200 : OK
  //  内容类型: text/plain
  response.writeHead(200, {'Content-Type': 'text/plain'})

  //  发送响应数据 "Hello World"
  response.end('Hello World\n')
}).listen(8888)

//  终端打印如下信息
console.log('Server running at http:// 127.0.0.1:8888/')
